import battlegui.Orientation;
import battlegui.Position;

/**
 * Deze klasse representeer een hut van een van de spelers.
 * 
 * @author Eric de Potter de ten Broeck
 * @version 1.0
 */
public class Hut
{
    private int length;
    private Orientation orientation;
    private Position position;
    private Position[] positions;
    private int numberLeft;

    /**
     * Constructor for objects of class Hut
     */
    public Hut(int length, Orientation o, Position p)
    {
        this.length = length;
        numberLeft = length;
        orientation = o;
        position = p;
    }

    /**
     * Bepaalt of het schot de hut heeft geraakt.
     * 
     * @return   geeft true als de het geraakt is en false als het schot de hut niet
     *  geraakt heeft
     */
    public boolean isHit(Position shot)
    {
        boolean hit = false;
        int index = 0;
        Position[] places = getOccupied();
        while (index < places.length && !hit)
        {
            if (places[index].equals(shot))
            {
                hit = true;
                numberLeft --;
            }
            index++;
        }
        return hit;
    }
    
    /**
     * Retourneert de orienatatie van de hut.
     * 
     * @return  de orientatie van de hut
     */
    public Orientation getOrientation()
    {
        return orientation;
    }
    
    /**
     * Retourneert de lengte van de hut.
     * 
     * @return  de lengte van de hut als integer
     */
    public int getLength()
    {
        return length;
    }
    
    /**
     * Retourneert de positie van de hut (het eerste of bovenste blokje).
     * 
     * @return  de positie van het eerste of bovenste blokje
     */
    public Position getPosition()
    {
        return position;
    }
    
    /**
     * Geeft de posities die door de hut wordt ingenomen.
     * 
     * @return 
     */
    public Position[] getOccupied()
    {
        Position[] places = new Position[length];
        int index = 0;
        if (getOrientation() == Orientation.HORIZONTAL)
        {
            while( index < getLength())
            {
                places[index] = new Position(getPosition().getX() + index, getPosition().getY());
                index++;
            }
        }
        if (getOrientation() == Orientation.VERTICAL)
        {
            System.out.print("");
            while( index < getLength())
            {
                places[index] = new Position(getPosition().getX(), getPosition().getY() - index);
                index++;
            }
        }
        return places;
    }
    
    /**
     * Gaat na of alle vakjes, die de hut inneemt, geraakt zijn.
     * 
     * @return   true als alle vakjes geraakt zijn / anders false.
     */
    public boolean isBroken()
    {
        return (numberLeft <= 0);
    }
}
